package com;

import com.ProductImpl.IProducer;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/*
* 模拟一个消费者
* */
public class Client {
    public static void main(String[] args) {
        /*
        * 获得委托类
        * */
         final Producer producer=new Producer();
        /*
        * 获得代理类的对象*/
        IProducer  proxyProducer=(IProducer) Proxy.newProxyInstance(
                producer.getClass().getClassLoader(),//委托类的类加载器
                producer.getClass().getInterfaces(),//委托类的方法
                new InvocationHandler() {          //代理类对委托类的方法进行加工

                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        Object returnValue=null;
                        Float money=(Float)args[0];//获取方法中的参数
                        if (method.getName().equals("saleProduct")){
                            returnValue=method.invoke(producer,money*0.8f);
                        }
                        return returnValue;
                    }
                }

        );
        proxyProducer.saleProduct(10000f);//使用代理类升华的方法
    }
}
